


Dasar-dasar Pemrograman Dart
Gunakan โ โ atau tombol navigasi
Memahami fungsi variabel sebagai tempat menyimpan data dalam program Dart.
Membedakan String, int, double, bool, List, Map, null, var, final, const, dan dynamic.
Menggunakan operator aritmatika, assignment, perbandingan, logika, ternary, dan null-aware.
Menulis komentar kode yang membantu dokumentasi dan keterbacaan program.
Tempat menyimpan data - String, int, double, bool, List, Map
Melakukan operasi - Aritmatika, Perbandingan, Logika
Catatan dalam kode untuk dokumentasi
Latihan praktis: Kalkulator, Biodata, Penilaian
Bayangkan variabel seperti kotak atau wadah yang kita gunakan untuk menyimpan sesuatu.
Isi: teks/String
Isi: angka bulat/int
Isi: angka desimal/double
Isi: benar/salah/bool
Dalam pemrograman, kita memberi nama pada kotak tersebut, dan nilai yang kita simpan di dalamnya.
Nama variabel harus jelas, mudah dibaca, dan mengikuti aturan Dart. Nama yang baik membuat kode lebih mudah dipahami.
_, dan dollar $.class, void, if.nama berbeda dengan Nama.// โ
Benar
String namaSiswa = 'Budi';
int umur2 = 16;
double nilai_rata_rata = 87.5;
bool isAktif = true;
// โ Salah
String 2nama = 'Budi'; // diawali angka
int umur siswa = 16; // ada spasi
String class = '10B'; // keyword DartDart menganjurkan gaya lowerCamelCase untuk variabel, yaitu kata pertama huruf kecil, kata berikutnya diawali huruf besar.
namaSiswa
jumlahBarang
totalNilaiAkhir
Jelas, ringkas, dan mengikuti lowerCamelCase.
nama_siswa
jumlah_barang
Masih terbaca, tetapi di Dart lebih umum dipakai untuk file, bukan variabel.
ns
x
data1
Terlalu singkat atau tidak menjelaskan isi variabel.
Pilih nama yang menjawab pertanyaan: โdata apa yang disimpan?โ.
Contoh: gunakan nilaiUjian, bukan hanya n.
Cara ini kita menyebutkan secara jelas jenis data yang akan disimpan.
String nama = 'Budi';
// String = tipe data untuk teks/kata-kata
int umur = 20;
// int = tipe data untuk angka bulat (integer)
double tinggi = 170.5;
// double = tipe data untuk angka desimal
bool isMahasiswa = true;
// bool = tipe data untuk nilai benar/salahSupaya Dart tahu cara memperlakukan data tersebut. Angka bisa dihitung (10 + 5), tapi kata-kata tidak!
Dart akan otomatis menebak tipe data dari nilai yang diberikan.
var nama = 'Budi';
// Dart melihat 'Budi' โ otomatis tahu: tipe String
var umur = 20;
// Dart melihat 20 โ otomatis tahu: tipe int
var tinggi = 170.5;
// Dart melihat 170.5 โ otomatis tahu: tipe double
var isMahasiswa = true;
// Dart melihat true โ otomatis tahu: tipe boolGunakan var ketika tipe data sudah jelas dari nilainya. Ini membuat kode lebih ringkas!
dynamic adalah tipe data yang bisa berubah-ubah.
dynamic nilai = 100;
print(nilai); // Output: 100
nilai = 'Seratus'; // Berubah jadi teks, TIDAK ERROR!
print(nilai); // Output: Seratus
nilai = true; // Berubah jadi boolean!
print(nilai); // Output: truedynamic sebaiknya jarang digunakan karena mudah terjadi error yang tidak
terduga dan kode jadi sulit dipahami.
Konstanta adalah variabel yang nilainya TIDAK BISA DIUBAH setelah pertama kali diisi.
final String kota = 'Jakarta';
// Nilai ditentukan saat program berjalan
final waktu = DateTime.now();
// โ
OK! Waktu baru diketahui saat runconst double PI = 3.14159;
// Nilai sudah pasti sebelum program jalan
const waktu = DateTime.now();
// โ ERROR! const harus sudah tahu nilainya// INT - Angka Bulat (tanpa koma)
int usia = 25;
int suhu = -5;
int jumlahSiswa = 0;
// DOUBLE - Angka Desimal
double berat = 65.5;
double tinggi = 170.0;
double ipk = 3.75;
// NUM - Bisa int atau double
num angka = 100;
angka = 100.5; // Bisa juga double
Untuk menghitung jumlah (siswa, barang, umur)
Untuk pengukuran (berat, tinggi, harga)
Ketika tidak yakin akan dapat int atau double
String adalah tipe data untuk menyimpan kata, kalimat, atau teks.
// String dengan single quote
String pesan = 'Hello Dart';
String nama = 'Budi Santoso';
// String dengan double quote
String alamat = "Jl. Sudirman No. 123";
// String dengan beberapa baris (multiline)
String surat = '''
Kepada Yth.
Bapak/Ibu Guru
Dengan hormat...
''';Teks HARUS diapit dengan tanda petik (' ' atau " "). Tanpa petik, Dart akan menganggapnya sebagai nama variabel!
Boolean hanya punya dua nilai: true (benar) atau false (salah).
bool isActive = true; // Aktif
bool isMahasiswa = false; // Bukan mahasiswa
bool sudahMenikah = false; // Belum menikah
bool lulus = true; // Sudah lulus
// Digunakan untuk kondisi
bool dewasa = (umur >= 17); // Jika umur >= 17, true
List adalah kumpulan data yang disimpan berurutan.
// List berisi angka
List<int> angkaList = [1, 2, 3, 4, 5];
// List berisi teks
List<String> buah = ['Apel', 'Jeruk', 'Mangga'];
// Mengakses item (dimulai dari 0)
print(buah[0]); // Output: Apel (item pertama)
print(buah[1]); // Output: Jeruk (item kedua)
// Menambah item baru
buah.add('Pisang');
print(buah.length); // Output: 4Index (nomor urut) dimulai dari 0, bukan 1. Item pertama: index 0, Item kedua: index 1.
Map seperti kamus. Ada kata (kunci) dan artinya (nilai).
// Map dengan kunci String dan nilai int
Map<String, int> umurSiswa = {
'Andi': 20,
'Budi': 21,
'Citra': 19
};
// Mengakses nilai dengan kunci
print(umurSiswa['Andi']); // Output: 20
// Map dengan berbagai tipe nilai
Map<String, dynamic> mahasiswa = {
'nama': 'Andi',
'umur': 20,
'ipk': 3.75,
'aktif': true
};null artinya tidak ada nilai atau kosong.
// Variabel yang BISA menerima null (pakai tanda ?)
String? namaOpsional; // Sekarang isinya null
int? angkaOpsional = null;
print(namaOpsional); // Output: null
// Variabel BIASA tidak bisa null
String nama = null; // โ ERROR!
String nama = 'Budi'; // โ
HARUS diisi nilai
// Mengisi nilai setelahnya
namaOpsional = 'Ahmad';
print(namaOpsional); // Output: AhmadOperator untuk operasi matematika.
int a = 10, b = 3;
print(a + b); // 13 (Penjumlahan)
print(a - b); // 7 (Pengurangan)
print(a * b); // 30 (Perkalian)
print(a / b); // 3.33... (Pembagian โ double)
print(a ~/ b); // 3 (Pembagian Bulat)
print(a % b); // 1 (Sisa Bagi/Modulus)
| Operator | Nama | Contoh | Hasil |
|---|---|---|---|
| + | Penjumlahan | 10 + 3 | 13 |
| - | Pengurangan | 10 - 3 | 7 |
| * | Perkalian | 10 * 3 | 30 |
| / | Pembagian | 10 / 3 | 3.33... |
| ~/ | Pembagian Bulat | 10 ~/ 3 | 3 |
| % | Modulus | 10 % 3 | 1 |
Operator untuk menambah atau mengurangi nilai sebesar 1.
int c = 5;
print(c++); // Tampilkan 5, LALU c jadi 6
print(c); // Output: 6
print(c--); // Tampilkan 6, LALU c jadi 5
print(c); // Output: 5int c = 5;
print(++c); // Tambah dulu jadi 6, LALU tampilkan
print(c); // Output: 6
print(--c); // Kurang dulu jadi 5, LALU tampilkan
print(c); // Output: 5Operator untuk memberikan nilai ke variabel dengan cara singkat.
int x = 10;
x += 5; // x = x + 5 โ x = 15
x -= 3; // x = x - 3 โ x = 12
x *= 2; // x = x * 2 โ x = 24
x ~/= 4; // x = x ~/ 4 โ x = 6
x %= 4; // x = x % 4 โ x = 2
Lebih ringkas, cepat ditulis, dan menghindari kesalahan ketik!
Operator untuk membandingkan dua nilai. Hasilnya selalu boolean.
int a = 10, b = 20;
print(a == b); // false (Sama dengan)
print(a != b); // true (Tidak sama dengan)
print(a > b); // false (Lebih besar)
print(a < b); // true (Lebih kecil)
print(a >= 10); // true (Lebih besar atau sama)
print(a <= 9); // false (Lebih kecil atau sama)
| Operator | Arti | Contoh | Hasil |
|---|---|---|---|
| == | Sama dengan | 10 == 20 | false |
| != | Tidak sama dengan | 10 != 20 | true |
| > | Lebih besar | 10 > 20 | false |
| << /td> | Lebih kecil | 10 < 20 | true |
| >= | Lebih besar atau sama | 10 >= 10 | true |
| <=< /td> | Lebih kecil atau sama | 10 <= 9 | false |
Operator untuk menggabungkan beberapa kondisi.
bool isStudent = true;
bool hasID = false;
int age = 20;
// AND (&&) - SEMUA harus true
print(isStudent && hasID); // false
print(isStudent && (age >= 18)); // true
// OR (||) - SALAH SATU true sudah cukup
print(isStudent || hasID); // true
// NOT (!) - Membalikkan nilai
print(!hasID); // true
print(!isStudent); // false
Seperti "DAN" - Semua harus true
Seperti "ATAU" - Salah satu true cukup
Seperti "BUKAN" - Membalik nilai
Format: kondisi ? nilai_jika_true : nilai_jika_false
int nilai = 75;
// Cara panjang:
String status;
if (nilai >= 70) {
status = 'Lulus';
} else {
status = 'Tidak Lulus';
}
// Cara singkat dengan ternary:
String status = nilai >= 70 ? 'Lulus' : 'Tidak Lulus';
// Ternary bersarang
String grade = nilai >= 85 ? 'A' :
nilai >= 70 ? 'B' :
nilai >= 60 ? 'C' : 'D';
Operator untuk menangani nilai null (kosong).
// ?? (if-null) - Jika null, gunakan nilai default
String? nama;
String tampil = nama ?? 'Tidak ada nama';
print(tampil); // Output: Tidak ada nama
// ??= (null-aware assignment) - Assign hanya jika null
int? angka;
angka ??= 100; // Karena null, diisi 100
angka ??= 200; // Tidak berubah, tetap 100
// ?. (null-aware access) - Akses hanya jika tidak null
String? text;
print(text?.length); // null (tidak error)
Comments adalah catatan dalam kode yang TIDAK dijalankan oleh program.
// Ini komentar satu baris
int umur = 20; // Menampilkan umur
/*
Program Kalkulator
Dibuat oleh: Budi
Tanggal: 5 Oktober 2024
*//// Menghitung luas persegi panjang
/// [panjang] adalah panjang dalam cm
/// [lebar] adalah lebar dalam cm
double hitungLuas(double panjang, double lebar) {
return panjang * lebar;
}// Menghitung diskon member 20% + promo 5%
double totalDiskon = 0.20 + 0.05;
// FIXME: Bug perhitungan pajak
double pajak = harga * 0.10;
// TODO: Tambahkan validasi input
int umur = 20;
// Membuat variabel nama
String nama = 'Budi';
// Membuat variabel umur dengan nilai 20
int umur = 20;
// Menampilkan nama
print(nama);"Code should be self-documenting" - Gunakan nama variabel yang jelas. Comments hanya untuk menjelaskan HAL YANG TIDAK JELAS dari kode.
Durasi: 15-20 menit | Tingkat: โญ Mudah
void main() {
double angka1 = 15.5;
double angka2 = 4.5;
print('Penjumlahan: ${angka1 + angka2}');
print('Pengurangan: ${angka1 - angka2}');
print('Perkalian: ${angka1 * angka2}');
print('Pembagian: ${angka1 / angka2}');
}Durasi: 20-25 menit | Tingkat: โญโญ Sedang
void main() {
var nama = 'John Doe';
int umur = 25;
double ipk = 3.75;
bool lulus = true;
List<String> hobi = ['Membaca', 'Coding'];
print('Nama: $nama');
print('Umur: $umur tahun');
print('IPK: $ipk');
print('Status: ${lulus ? "Lulus" : "Belum"}');
}Durasi: 25-30 menit | Tingkat: โญโญ Sedang
void main() {
double nilaiTugas = 85.0; // Bobot 30%
double nilaiUTS = 75.0; // Bobot 30%
double nilaiUAS = 80.0; // Bobot 40%
double nilaiAkhir = (nilaiTugas * 0.30) +
(nilaiUTS * 0.30) +
(nilaiUAS * 0.40);
String grade = nilaiAkhir >= 85 ? 'A' :
nilaiAkhir >= 70 ? 'B' :
nilaiAkhir >= 60 ? 'C' : 'D';
print('Nilai Akhir: $nilaiAkhir');
print('Grade: $grade');
}String, int, double, bool, List, Map, null. Gunakan var untuk praktis, final/const untuk konstanta.
Aritmatika (+, -, *, /), Perbandingan (==, <,>), Logika (&&, ||, !), Ternary (?:)
Single-line (//), Multi-line (/* */), Documentation (///). Jelaskan yang tidak jelas!
Praktik adalah kunci. Kerjakan mini proyek untuk memahami konsep dengan baik!
Sistem kasir dengan diskon & pajak
โญโญ Sedang | 25 poin
Hitung BMI & analisis kesehatan
โญโญ Sedang | 25 poin
Rekapitulasi & syarat ujian
โญโญโญ Sulit | 25 poin
Slip gaji lengkap karyawan
โญโญโญ Sulit | 25 poin
Semua tugas dikumpulkan dalam 1 minggu. Keterlambatan akan mengurangi nilai!
Nilai: 25 poin | Tingkat: โญโญ Sedang
Buat program kasir toko yang menghitung:
Validasi uang bayar & point reward (1 poin per Rp10.000)
===================================
TOKO SERBAGUNA JAYA
===================================
Tanggal: 5 Oktober 2024
Kasir : Budi Santoso
-----------------------------------
[Nama Barang] Harga ร Qty
-----------------------------------
Beras 5kg 60.000 ร 1
Subtotal 60.000
Minyak Goreng 2L 30.000 ร 2
Subtotal 60.000
-----------------------------------
Total Belanja XXX.XXX
Diskon Member (15%) XXX.XXX
-----------------------------------
Subtotal setelah diskon XXX.XXX
Pajak (11%) XXX.XXX
-----------------------------------
TOTAL BAYAR XXX.XXX
===================================
Tunai XXX.XXX
Kembalian XXX.XXX
===================================
Minimal 5 barang, setiap barang punya quantity. Gunakan toStringAsFixed(0) untuk format
rupiah.
Nilai: 25 poin | Tingkat: โญโญ Sedang
BMI = Berat (kg) / (Tinggi (m))ยฒGrafik visual BMI & kalori harian
========================================
KALKULATOR BMI (Body Mass Index)
========================================
DATA PRIBADI:
Nama : John Doe
Jenis Kelamin : Laki-laki
Usia : 25 tahun
Tinggi Badan : 175 cm (1.75 m)
Berat Badan : 70 kg
----------------------------------------
HASIL PERHITUNGAN:
BMI Anda : 22.86
Kategori : Normal โ
Status : Berat badan ideal
----------------------------------------
ANALISIS KESEHATAN:
Range BMI Normal: 18.5 - 22.9
Berat Ideal Min : XX.X kg
Berat Ideal Max : XX.X kg
========================================
Berat ideal min = 18.5 ร tinggiยฒ, max = 22.9 ร tinggiยฒ. Gunakan toStringAsFixed(2) untuk BMI.
Nilai: 25 poin | Tingkat: โญโญโญ Sulit
Validasi input & grafik kehadiran
=============================================
REKAPITULASI ABSENSI MAHASISWA
=============================================
DATA MAHASISWA:
Nama : Sarah Ahmad
NPM : 2023110003
Mata Kuliah : Pemrograman Dart
---------------------------------------------
DETAIL KEHADIRAN:
Total Pertemuan : 14 kali
Hadir : 11 kali (100%)
Izin : 1 kali (75%)
Sakit : 1 kali (50%)
Alpha : 1 kali (0%)
---------------------------------------------
PERHITUNGAN:
Kehadiran Efektif : 11 + (1ร0.75) + (1ร0.5) + (1ร0)
= 12.25 pertemuan
Persentase Hadir : (12.25 / 14) ร 100% = 87.50%
---------------------------------------------
ANALISIS SYARAT:
โ Persentase >= 75% : YA (87.50%)
โ Alpha maksimal 2 kali : YA (1 kali)
โ Kehadiran efektif >= 11 : YA (12.25)
---------------------------------------------
STATUS: โ MEMENUHI SYARAT UJIAN
=============================================
Nilai: 25 poin | Tingkat: โญโญโญ Sulit
Fungsi terbilang, THR, export file
====================================================
PT. MAJU SEJAHTERA
SLIP GAJI KARYAWAN
====================================================
PERIODE : Oktober 2024
DATA KARYAWAN:
Nama : Ahmad Fauzi
Jabatan : Supervisor
Masa Kerja : 4 tahun 3 bulan
Rating Kinerja : 4 (Good)
----------------------------------------------------
PENGHASILAN:
Gaji Pokok Rp 6.000.000
Tunjangan:
- Jabatan (20%) Rp 1.200.000
- Transport Rp 500.000
- Makan Rp 400.000
Bonus:
- Kinerja (10%) Rp 600.000
- Masa Kerja (5%) Rp 300.000
----------------------------------------------------
GAJI BRUTO Rp 9.000.000
----------------------------------------------------
POTONGAN:
BPJS Kesehatan (1%) Rp 60.000
BPJS Ketenagakerjaan (2%) Rp 120.000
Pajak PPh21 (15%) Rp 1.350.000
----------------------------------------------------
TOTAL POTONGAN Rp 1.530.000
====================================================
GAJI BERSIH Rp 7.470.000
====================================================
// โ BAIK: Nama variabel jelas + comments informatif
double gajiPokok = 5000000;
// Hitung tunjangan jabatan Supervisor 20%
double tunjanganJabatan = gajiPokok * 0.20;
// โ BURUK: Nama tidak jelas, tanpa comments
double gp = 5000000;
double tj = gp * 0.20;
1. Input data barang (nama, harga, qty)
2. Hitung subtotal setiap barang
3. Jumlahkan semua subtotal
4. Cek status member
5. Hitung diskon sesuai syarat
6. Hitung pajak dari total setelah diskon
7. Hitung total bayar
8. Input uang dibayar
9. Hitung kembalian
10. Tampilkan struk
Ada Pertanyaan?